﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using AutorizacionViajesMVC.Models;
using System.ServiceModel;
using System.ComponentModel.DataAnnotations;

namespace AutorizacionViajesMVC.Controllers
{
    public class UsuarioController : Controller
    {
        public List<WSUsuario.Usuario> listarUsuarios()
        {
            WSUsuario.UsuariosClient proxy = new WSUsuario.UsuariosClient();
            List<WSUsuario.Usuario> usuarios = proxy.ListarUsuarios().ToList();
            return usuarios;
        }

        public WSUsuario.Usuario obtenerUsuario(int Cod_usuario)
        {
            WSUsuario.UsuariosClient proxy = new WSUsuario.UsuariosClient();
            WSUsuario.Usuario usuario = proxy.ObtenerUsuario(Cod_usuario);
            return usuario;
        }

        public WSUsuario.Usuario buscarUsuario(string codg)
        {
            //try
            //{
                WSUsuario.UsuariosClient proxy = new WSUsuario.UsuariosClient();
                WSUsuario.Usuario usuario = proxy.BuscarUsuario(codg);
                return usuario; // proxy.BuscarUsuario(codg); //usuario;
            //}
            //catch (FaultException<ValidationException> e)
            //{
            //    var c = e.Message;
            //    TempData["error"] = e.Message;
            //    return null;// View("Index");
                //if (c == null)
                //{
                //    throw new FaultException<AutorizacionViajesMVC.WSUsuario.ValidationException>(new AutorizacionViajesMVC.WSUsuario.ValidationException() { ValidationError = "Usuario No Existe" }, new FaultReason("Usuario No Existe"));
                //}
                //if (c == "BLOQUEADO")
                //{
                //    throw new FaultException<AutorizacionViajesMVC.WSUsuario.ValidationException>(new AutorizacionViajesMVC.WSUsuario.ValidationException() { ValidationError = "Usuario esta Bloqueado" }, new FaultReason("Usuario Bloqueado"));
                //}
                //if (c == "VACACIONES")
                //{
                //    throw new FaultException<AutorizacionViajesMVC.WSUsuario.ValidationException>(new AutorizacionViajesMVC.WSUsuario.ValidationException() { ValidationError = "Usuario esta de Vacaciones" }, new FaultReason("Usuario Vacaciones"));
                //}
                ////TempData["error"] = e.Message;
                //return null;
                //return RedirectToAction("Index");
            //}
        }

        public WSUsuario.Usuario modificarUsuario(int codigo, string nom, string ape, int area, string codg, string ccosto, string dni, string status)
        {
            WSUsuario.UsuariosClient proxy = new WSUsuario.UsuariosClient();
            return proxy.ModificarUsuario(codigo, nom, ape, area, codg, ccosto, dni, status);
        }

        public void eliminarUsuario(int Cod_Usuario)
        {
            WSUsuario.UsuariosClient proxy = new WSUsuario.UsuariosClient();
            proxy.EliminarUsuario(Cod_Usuario);

        }

        public WSUsuario.Usuario crearUsuario(string nom, string ape, int area, string codg, string ccosto, string dni, string status)
        {
            WSUsuario.UsuariosClient proxy = new WSUsuario.UsuariosClient();
            return proxy.CrearUsuario(nom, ape, area, codg, ccosto, dni, status);
        }


        public ActionResult Index()
        {
            List<WSUsuario.Usuario> Usuarios = listarUsuarios();
            return View(Usuarios);
        }

 
        public ActionResult Details(int id)
        {
            WSUsuario.Usuario Usuario = obtenerUsuario(id);
            return View(Usuario);
        }

        public ActionResult Buscar(FormCollection form)
        {
            try
            {
                var cod = form["Text1"];
                WSUsuario.Usuario Usuario = buscarUsuario(cod);
                return View(Usuario);
            }
            catch (FaultException<ValidationException> e)
            {
                TempData["error"] = e.Message;
                return RedirectToAction("Index");
            }
            catch (Exception ex)
            {
                TempData["error"] = ex.Message;
                return RedirectToAction("Index");
            }
        }


        //
        // GET: /Usuarios/Create

        public ActionResult Create()
        {
            WSUsuario.Usuario Usuario = new WSUsuario.Usuario();
            return View(Usuario);
        }

        //
        // POST: /Usuarios/Create

        [HttpPost]
        public ActionResult Create(FormCollection collection)
        {
            try
            {

                if (ModelState.IsValid)
                {
                   // WSUsuario.Usuario res = WSUsuario.Usuario();
                    WSUsuario.Usuario res = crearUsuario(collection["Nombre"], collection["Apellidos"], int.Parse(collection["Area"]), collection["CodigoG"], collection["CCosto"], collection["DNI"], collection["Status"]);
                    return RedirectToAction("Index");

                }
            }
            catch
            {
                return View();
            }
            return RedirectToAction("Index");
        }

        
        // GET: /Usuarios/Edit/5

        public ActionResult Edit(int id)
        {
            WSUsuario.Usuario Usuario = obtenerUsuario(id);
            return View(Usuario);
        }

        //
        // POST: /Usuarios/Edit/5

        [HttpPost]
        public ActionResult Edit(int id, FormCollection collection)
        {
            try
            {
                WSUsuario.Usuario res = modificarUsuario(int.Parse(collection["Codigo"]), collection["Nombre"], collection["Apellidos"], int.Parse(collection["Area"]), collection["CodigoG"], collection["CCosto"], collection["DNI"], collection["Status"]);
                return RedirectToAction("Index");
            }
            catch
            {
                return RedirectToAction("Index");
            }
        }

        ////
        //// GET: /Usuarios/Delete/5

        public ActionResult Delete(int id)
        {
            WSUsuario.Usuario Usuario = obtenerUsuario(id);
            return View(Usuario);
        }

        //
        // POST: /Usuarios/Delete/5

        [HttpPost]
        public ActionResult Delete(int id, FormCollection collection)
        {
            try
            {
                eliminarUsuario(id);
                return RedirectToAction("Index");
            }
            catch
            {
                return RedirectToAction("Index");
            }
        }

        
    }
}
